package automatique;

import java.util.ArrayList;
import jwnl.JWNLDistances;

public class Ensemble {

    ArrayList<Element> Ens; // ensemble d'éléments
    Element Centre;

    Ensemble() {
        Centre = null;
        Ens = new ArrayList<Element>();
    }

    Ensemble(Element e) // créer un ensemble é partir d'un élément et détermination de centre
    {
        Ens = new ArrayList<Element>();
        this.Ens.add(e);
        Centre = new Element("Centre", e.Value);
    }

    double distance(Ensemble E1, JWNLDistances d) {
        double dSim = this.Centre.distance(E1.Centre, d);
        //System.out.println("computeSimilarity: " + dSim);
        return dSim;
    }

    double determiner_distance_autres(int k, JWNLDistances d) {
        double somme = 0.0;
        for (int i = 0; i < Ens.size(); i++) {
            somme += Ens.get(k).distance(Ens.get(i), d);
        }
        return somme;
    }

    ArrayList determiner_tableau_distances(JWNLDistances d) {
        ArrayList<Double> tableau = new ArrayList<Double>();
        for (int i = 0; i < Ens.size(); i++) {
            tableau.add(determiner_distance_autres(i, d));
        }

        return tableau;
    }

    void determiner_centre(JWNLDistances d) {
        Centre.Libelet = "Centre";
        ArrayList<Double> tSomme = determiner_tableau_distances(d);

        double max = 0.0;
        int pos = 0;

        for (int i = 0; i < tSomme.size(); i++) {
            if (max < tSomme.get(i)) {
                pos = i;
                max = tSomme.get(i);
            }
        }

        Centre.Value = this.Ens.get(pos).Value;
    }

    void fusion_ensembles(Ensemble E1, JWNLDistances d) {
        for (int i = 0; i < E1.Ens.size(); i++) {
            this.Ens.add(E1.Ens.get(i));
        }
        determiner_centre(d);
    }

    boolean contains(String V) {
        for (int i = 0; i < Ens.size(); i++) {
            if (Ens.get(i).equals(V.toLowerCase())) {
                return true;
            }
        }
        return false;
    }
}
